assume cs:code 

code segment
    table dw offset sub1, offset sub2,offset sub3, offset sub4
    ;ah中为功能号：0，1，2，3。al中为颜色值取值从1-7
start: mov ah, 3
    mov al, 4
    mov bh, 0
    mov bl, ah
    add bx, bx
    call table[bx]
    
    mov ax, 4c00h
    int 21h
    ;清屏
    sub1:push bx
         push es
         push cx

         mov bx, 0b800h
         mov es,bx
         mov bx, 0
         mov cx, 2000
   sub1s:mov byte ptr es:[bx], ' '
         add bx, 2
         loop sub1s
        
        pop cx
        pop es
        pop bx
        ret

;更改前景色
  sub2:push bx
       push es
       push cx

       mov bx, 0b800h
       mov es, bx
       mov bx, 1
       mov cx, 2000
 sub2s:and byte ptr es:[bx], 11111000B  ;设置显存中当前屏幕中处于奇地址的属性字节的第0，1，2位，置0
       or es:[bx], al   ;(al){1234567},将0，1，2相应位置1
       add bx, 2
       loop sub2s

       pop cx
       pop es
       pop bx
       ret

;设置背景颜色
 sub3:push bx
      push es
      push cx

      mov cl , 4
      shl al, cl    ;将al左移4位目的将第0，1，2位移到第4，5，6位
      mov bx, 0b800h
      mov es, bx
      mov bx, 1
      mov cx, 2000
sub3s:and byte ptr es:[bx], 10001111B  ;将第4， 5， 6位置0
      or es:[bx], al    ;相应位置1
      add bx, 2
      loop sub3s
     
     pop cx
     pop es
     pop bx
     ret

sub4:
     push si
     push di
     push es
     push ds
     push cx

     mov si, 0b800h
     mov es, si
     mov ds, si
     mov si, 160
     mov di, 0
     cld
     mov cx, 24

sub4s:push cx
      mov cx, 160
      rep movsb
      pop cx
      loop sub4s   ;将第n+1行复制到第n行,先从第2行复制到第一行

      mov cx, 80
      mov si, 0
sub4s1:mov byte ptr [160 * 24 + si], ' ' ;最后一行清空
       add si, 2
       loop sub4s1
    
     pop cx
     pop ds
     pop es
     pop di
     pop si
     ret

code ends
end start



